import request from '@/util/axios';
import type { roleList, addRoleItem, roleDetail, roleUserList, roleUserItem, roleTreeItem } from './roleManagement_type';

// 统一管理接口
enum API {
  RoleList = '/api/system/role/list',
  AddRole = '/api/system/role/create', // 新增角色
  RoleInfo = '/api/system/role/detail',
  UserList = '/api/system/user/list', // 用户列表
  UserRoleList = '/api/system/role/user/list', // 角色用户
  DelRole = '/api/system/role/delete', // 删除角色
  EditRole = '/api/system/role/update', // 编辑角色
  RoleAddUser = '/api/system/role/user/create', // 角色用户创建
  RoleDelUser = '/api/system/role/user/delete', // 角色用户删除
  RoleMenuList = '/api/system/role/menu/list', // 菜单树
  RoleMenuDetail = '/api/system/role/menu/query',
  RoleOrgList = '/api/system/org/tree', // 组织树
  RoleOrgDetail = '/api/system/role/org/query',
  RoleAddMenu = '/api/system/role/menu/upsert',
  RoleAddOrg = '/api/system/role/org/upsert',
  RoleStatusUpdata = '/api/system/role/status/update'
}

// 角色列表
export async function role_list(params: roleList) {
  try {
    return await request.get(API.RoleList, { params });
  } catch (error) {
    console.error('获取角色列表时发生错误：', error);
    throw new Error('无法获取角色列表，请稍后重试。');
  }
}

// 新增角色
export async function addRole(params: addRoleItem) {
  try {
    return await request.post(API.AddRole, params);
  } catch (error) {
    console.error('新增角色列表时发生错误：', error);
    throw new Error('无法新增角色，请稍后重试。');
  }
}

// 编辑角色
export async function editRole(params: addRoleItem) {
  try {
    return await request.post(API.EditRole, params);
  } catch (error) {
    console.error('编辑角色列表时发生错误：', error);
    throw new Error('无法编辑角色，请稍后重试。');
  }
}

// 角色详情
export async function getRoleInfo(params: roleDetail) {
  try {
    return await request.get(API.RoleInfo, { params });
  } catch (error) {
    console.error('角色详情时发生错误：', error);
    throw new Error('无法获取角色详情，请稍后重试。');
  }
}

// 删除角色
export async function delRole(params: roleDetail) {
  try {
    return await request.get(API.DelRole, { params });
  } catch (error) {
    console.error('删除角色时发生错误：', error);
    throw new Error('无法删除角色，请稍后重试。');
  }
}

// 角色用户列表
export async function userRoleList(params: roleUserList) {
  try {
    return await request.get(API.UserRoleList, { params });
  } catch (error) {
    console.error('获取角色用户列表时发生错误：', error);
    throw new Error('无法获取角色用户列表，请稍后重试。');
  }
}

// 移除用户
export async function roleDelUser(params: roleUserItem) {
  try {
    return await request.post(API.RoleDelUser, params);
  } catch (error) {
    console.error('删除角色用户时发生错误：', error);
    throw new Error('无法获取角色用户，请稍后重试。');
  }
}

// 用户列表
export async function user_list(params: roleUserList) {
  try {
    return await request.get(API.UserList, { params });
  } catch (error) {
    console.error('获取用户列表时发生错误：', error);
    throw new Error('无法获取用户列表，请稍后重试。');
  }
}

// 新增角色用户
export async function addRoleUser(params: roleUserItem) {
  try {
    return await request.post(API.RoleAddUser, params);
  } catch (error) {
    console.error('新增角色列表时发生错误：', error);
    throw new Error('无法新增角色，请稍后重试。');
  }
}

// 菜单列表
export async function menu_list() {
  try {
    return await request.get(API.RoleMenuList);
  } catch (error) {
    console.error('获取菜单列表时发生错误：', error);
    throw new Error('无法获取菜单列表，请稍后重试。');
  }
}


// 菜单选中详情
export async function menu_detail(params:roleTreeItem) {
  try {
    return await request.get(API.RoleMenuDetail, { params });
  } catch (error) {
    console.error('获取菜单列表时发生错误：', error);
    throw new Error('无法获取菜单列表，请稍后重试。');
  }
}

// 组织列表
export async function org_list() {
  try {
    return await request.get(API.RoleOrgList);
  } catch (error) {
    console.error('获取组织列表时发生错误：', error);
    throw new Error('无法获取组织列表，请稍后重试。');
  }
}

// 组织选中详情
export async function org_detail(params:roleTreeItem) {
  try {
    return await request.get(API.RoleOrgDetail, { params });
  } catch (error) {
    console.error('获取菜单列表时发生错误：', error);
    throw new Error('无法获取菜单列表，请稍后重试。');
  }
}

// 角色添加菜单
export async function role_menu_add(params: addRoleItem) {
  try {
    return await request.post(API.RoleAddMenu, params);
  } catch (error) {
    console.error('新增角色列表时发生错误：', error);
    throw new Error('无法新增角色，请稍后重试。');
  }
}

// 角色添加组织
export async function role_org_add(params: addRoleItem) {
  try {
    return await request.post(API.RoleAddOrg, params);
  } catch (error) {
    console.error('新增角色列表时发生错误：', error);
    throw new Error('无法新增角色，请稍后重试。');
  }
}